
// Copyright (C) 2009-2011 Luca Piccioni
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//  
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//  
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

using System;

namespace Derm.Scene
{
	/// <summary>
	/// Rendering animation.
	/// </summary>
	/// <remarks>
	/// <para>
	/// This class defines a base implementation for rendering animation. The animation is
	/// executed before rendering each frame, allowing to modify objects involved in rendering.
	/// This execution path mantains a non mutable rendering hierarchy, but could decrease
	/// performances since animation blocks rendering operations for its execution.
	/// </para>
	/// <para>
	/// Classes which implements RenderAnimation are registered to a RenderKernel default service,
	/// which execute RenderAnimation implementation. Since the access to the RenderKernel service
	/// is synchronized with RenderKernel rendering loop (where animation are executed), the number
	/// of accesses to the RenderKernel default service should be minimized.
	/// </para>
	/// </remarks>
	public abstract class RenderAnimation
	{
		/// <summary>
		/// The 
		/// </summary>
		public abstract object AnimationObject { get; }

		/// <summary>
		/// 
		/// </summary>
		/// <param name="aniTime"></param>
		public abstract void Animate(TimeSpan aniTime);
	}
}
